package thread;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class MyCallableDemo1 {
    public static void main(String[] args) {
        /**
         * 这段代码创建了一个Callable对象MyCallable，
         * 并将其传递给FutureTask构造函数。
         * 然后，将FutureTask对象传递给Thread构造函数，
         * 创建一个新线程。
         * 这个新线程将在后台执行MyCallable的call()方法，
         * 并返回一个Integer类型的结果。
         * 这个结果可以通过调用FutureTask的get()方法来获取。
         * 这种方式可以在多线程环境下执行耗时的操作，而不会阻塞主线程。
         */
        MyCallable myCallable = new MyCallable();
        FutureTask<Integer> futureTask = new FutureTask<>(myCallable);
        //创建线程
        Thread thread = new Thread(futureTask);
        //启动线程
        thread.start();
        try {
            //结果可以通过调用FutureTask的get()方法来获取
            Integer integer = futureTask.get();
            System.out.println(integer);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        } catch (ExecutionException e) {
            throw new RuntimeException(e);
        }
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + i);
        }

    }
}
